767 words
正则表达式正则表达式(regular expression)描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。 MySQL通过REGEXP关键字支持正则表达式进行字符串匹配。 格式 模式 描述 ^ 匹配输入字符串的开始位置。 $ 匹配输入字符串的结束位置。 . 匹配除 “\n” 之外的任何单个字符。 […] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。 [^…] 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。 p1|p2|p3 匹配 p1 或 p2 或 p3。例如,’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。 ***** 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo...
2.7k words
数据查询DQL数据库管理系统一个重要功能就是数据查询,数据查询不应只是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。 MySQL提供了功能强大、灵活的语句来实现这些操作。 MySQL数据库使用select语句来查询数据。 基本查询语法格式 12345678910select [all|distinct] <目标列的表达式1> [别名], <目标列的表达式2> [别名]...from <表名或视图名> [别名],<表名或视图名> [别名]...[where<条件表达式>][group by <列名> [having <条件表达式>]][order by <列名> [asc|desc]][limit <数字或者列表>]; 这里的关键字太多了 where就是第一步的筛选条件,group by是分组条件,having是第二步的筛选条件,order by是排序,limit是限制条数 我们用到的最多的就是三个关键字 1select *| 列...
709 words
原题链接1264. 动态求连续区间和 题目难度:简单 题目来源:《信息学奥赛一本通》 题目描述给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b] 的连续和。 输入格式第一行包含两个整数 n 和 m,分别表示数的个数和操作次数。 第二行包含 n 个整数,表示完整数列。 接下来 m 行,每行包含三个整数 k,a,b (k = 0,表示求子数列[a,b]的和;k=1,表示第 a 个数加 b)。 数列从 1 开始计数。 输出格式输出若干行数字,表示 k = 0 时,对应的子数列 [a,b] 的连续和。 数据范围1≤n≤100000,1≤m≤100000,1≤a≤b≤n,数据保证在任何时候,数列中所有元素之和均在 int 范围内。 输入样例:123456710 51 2 3 4 5 6 7 8 9 101 1 50 1 30 4 81 7 50 4 8 输出样例:123113035 题目分析这道题的意思就是单点操作,区间查询 对于树状数组的来说是和我们之前讲解的内容相差无几 算法基础之树状数组 算法基础之线段树 示...
1.3k words
约束我们在之前创建表的时候有提到过约束条件(constraint),他的作用就是用于约束表中的数据,例如非空性,唯一性等,约束的分类也很多有如下 中文 关键字 主键约束 primary key(PK) 自增长约束 auto_increment 非空约束 not null 唯一性约束 unique 默认约束 default 零填充约束 zerofill 外键约束 foreign key(FK) 主键约束主键约束(primary key)形象化的来理解就是使用某一列或者几列作为这个表的标识,可以提高表的查询速度,主键约束其实就相当于唯一约束加上非空约束的组合,不允许重复也不允许出现空值,而且每个表最多只有一个主键,当主键约束被创建时,系统默认会在所在的列和列组合上建立对应的唯一索引,这里也是简单理解为可以用于快速查询的功能 添加单列主键创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键 第一种 12345create table 表名( ... <字段名> <数据类型> prim...
355 words
线段树线段树的原理十分简单,但是在代码上会相对复杂一点 他也是用来维护一个序列,是一个完全二叉树的形状 对于每一个节点是一个结构体 12345struct Node{ int L,R; int sum; // 以和为例}; 假设序列为1到7,那么根节点存的就是这7个数的总和,如果区间长度不是1的话,就会平均分成两部分,这两部分就是根节点的子节点,如此递归下去 他有两个操作,第一个操作是单点修改,是一个递归的过程,只用修改信息需要变化的节点,我们需要改变叶子节点,然后回溯时重新计算即可 第二个操作称之为区间查询,查询时,如果有查询区间可以包含某一个区间,那么就直接返回,如果是不包含,那么就是进行递归,直到包含,然后进行计算再回溯 线段树中有四个函数 第一个是pushup,用子节点信息更新当前节点信息,这个一般不用写,就一句话 第二个是build,在一段区间上初始化线段树 第三个是modify,是修改操作 第四个是query,查询操作 我们之后在题目中实践即可
559 words
树状数组树状数组能解决的最关键的问题就是能够$O(\log n)$内,给某个位置上的数,加上一个数,或者求前缀和 他和前缀和数组的区别就是,树状数组支持修改原数组的内容,而前缀和数组不支持,需要重新求前缀和数组 总结一下树状数组能做的操作就是单点修改和区间查询,对于他的其他的功能,例如区间修改,单点查询,区间修改,区间查询都是使用差分的思想转化成最基础的思想 这里我们需要利用图像来表示 这里的树状数组虽然画出来是个树,但本质上还是一维数组 其中的任意一个数字其实表示的是一段数的和,例如$C[8]=A[1]+\dots+A[8]$ 那么对于$C[x]$,我们如何确定x的层数呢,其实是可以利用x的二进制表示,其中末尾有几个0,就是第几层的数字,假设他最后有k个0,那么$C[x]=\sum_{x-2^k+1}^xA[x]$,C++中有一个lowbit(x)函数,可以返回$2^k$,因此这个表达式也可以写成$C[x]=\sum_{x-lowbit(x)+1}^xA[x]$,补充这里这里的lowbit(x)函数的原理就是位运算$x&-x$ 有了这部...
416 words
数据操作DML这里的数据操作就是增删改的更新操作,不包括查询 插入12insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3...); //向表中插入对应列insert into 表 values (值1,值2,值3...); //向表中插入所有列 第一种是需要按照列名对应写数值的,可以省略,但必须对应 第二种是一次插入一行,是都要写的 也可以插入多行只需在之后填入新的行即可 1234insert into student(sid,name,gender,age,birth,address,score) values(1001,'男',18,'1996-12-23','北京',83.5), (1001,'男',18,'1996-12-23','北京',83.5);insert into student values(1001,'男',18,&#...
711 words
原题链接788. 逆序对的数量 题目难度:简单 题目描述给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。 输入格式第一行包含整数 n,表示数列的长度。 第二行包含 n 个整数,表示整个数列。 输出格式输出一个整数,表示逆序对的个数。 数据范围$1 \le n \le 100000$,数列中的元素的取值范围 $[1,10^9]$。 输入样例:1262 3 4 5 6 1 输出样例:15 题目分析逆序对首先数对,他是一个线性代数中的概念,简单的理解就是,前面的数字比后面的数字大就是一个逆序对,需要注意的是,如果两个数字相同,则应该标记为不同的数字,只是数值相同 我们主要的思想还是采用分治,可以借用归并排序的思路,在归并排序的过程中计算出这个问题的答案 对于分治来说,如何不重不漏的将情况分出来是最重要的 假设这是某一次分治的结果,分为[L,Mid]和[Mid+1,R]两个区间,红绿蓝表示可能出现的逆序对的位置 这一次...